package sv.gob.mtps.colectivas.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import sv.gob.mtps.colectivas.model.TbExpediente;
import sv.gob.mtps.colectivas.model.TbExpedienteEstado;
import sv.gob.mtps.colectivas.model.TbExpedienteResultado;
import sv.gob.mtps.colectivas.model.VwExpedienteResultado;

@Repository
public class ExpedienteDAOImpl implements ExpedienteDAO {

	@Autowired
	SessionFactory sessionFactory;
	
	@Override
	public void addExpediente(TbExpediente tbExpediente) {
		// TODO Auto-generated method stub
		this.sessionFactory.getCurrentSession().save(tbExpediente);
	}

	@Override
	public List<TbExpediente> listExpedientes() {
		// TODO Auto-generated method stub
		String hql = "from TbExpediente";
		return this.sessionFactory.getCurrentSession().createQuery(hql).list();
	}

	@Override
	public List<TbExpediente> listExpedientes(String hql) {
		// TODO Auto-generated method stub
		String from = "from TbExpediente ";
		return this.sessionFactory.getCurrentSession().createQuery(from+hql).list();
	}

	@Override
	public void addExpedienteEstado(TbExpedienteEstado ee) {
		// TODO Auto-generated method stub
		this.sessionFactory.getCurrentSession().save(ee);
	}

	@Override
	public List<TbExpedienteEstado> listEstadosExpediente(Integer id) {
		// TODO Auto-generated method stub
		String hql = "from TbExpedienteEstado where tbExpediente.idExpediente = "+id;
		return this.sessionFactory.getCurrentSession().createQuery(hql).list();
	}

	@Override
	public TbExpediente findExpediente(Integer id) {
		// TODO Auto-generated method stub
		return (TbExpediente) this.sessionFactory.getCurrentSession().get(TbExpediente.class, id);
	}

	@Override
	public void addResultado(TbExpedienteResultado resultado) {
		// TODO Auto-generated method stub
		sessionFactory.getCurrentSession().save(resultado);
	}

	@Override
	public void editResultado(TbExpedienteResultado resultado) {
		// TODO Auto-generated method stub
		sessionFactory.getCurrentSession().update(resultado);
	}

	@Override
	public void deleteResultado(Integer id) {
		// TODO Auto-generated method stub
		TbExpedienteResultado r = (TbExpedienteResultado) sessionFactory.getCurrentSession().load(TbExpedienteResultado.class, id);
		if(r!= null){
			sessionFactory.getCurrentSession().delete(r);
		}
	}

	@Override
	public List<TbExpedienteResultado> listResultadoExpediente(Integer id) {
		// TODO Auto-generated method stub
		String hql = "from TbExpedienteResultado where tbExpediente.idExpediente = "+id;
		return this.sessionFactory.getCurrentSession().createQuery(hql).list();
	}

	@Override
	public void editExpediente(TbExpediente tbExpediente) {
		// TODO Auto-generated method stub
		sessionFactory.getCurrentSession().update(tbExpediente);
		
	}

	@Override
	public void deleteExpediente(Integer id) {
		// TODO Auto-generated method stub
		TbExpediente e = (TbExpediente) sessionFactory.getCurrentSession().load(TbExpediente.class, id);
		if(e!=null){
			sessionFactory.getCurrentSession().delete(e);
		}
	}

	@Override
	public List<VwExpedienteResultado> listExpedienteResultados() {
		// TODO Auto-generated method stub
		String hql = "from VwExpedienteResultado";
		return this.sessionFactory.getCurrentSession().createQuery(hql).list();
	}

	@Override
	public List<VwExpedienteResultado> listExpedienteResultados(Integer id) {
		// TODO Auto-generated method stub
		String hql = "from VwExpedienteResultado where id.idExpediente="+id; 
		return this.sessionFactory.getCurrentSession().createQuery(hql).list();
	}

}
